package com.web.service;

import com.web.pojo.domain.Device;
import com.web.pojo.domain.DeviceGroup;
import com.web.pojo.dto.DeviceGroupAddDeviceDTO;

import java.util.List;

/**
 * @Author: wws
 * describe:
 */
public interface DeviceGroupServer {

    /**
     * 添加设备分组信息
     * @param deviceGroup 分组信息
     * @return 结果
     */
    Integer insertDeviceGroup(DeviceGroup deviceGroup);

    /**
     * 修改设备分组信息
     * @param deviceGroup 分组信息
     * @return 结果
     */
    public Integer updateDeviceGroup(DeviceGroup deviceGroup);

    /**
     * 删除设备组
     * @param username 删除者
     * @param deviceGroupIds 组ids
     * @return
     */
    public Integer deleteDeviceGroup(String username, List<Integer> deviceGroupIds);

    /**
     * 查看设备组
     * @param str 查询条件
     * @param userId 用户id
     * @return 结果
     */
    public List<DeviceGroup> selectDeviceGroupList(String str, Integer userId);

    /**
     * 根据组Id查询设备组地址
     * @param deviceGroupIds 组id
     * @return 结果
     */
    public List<DeviceGroup> selectDeviceGroupAddrById(List<Integer> deviceGroupIds);

    /**
     * 将设备添加到设备组中
     * @param deviceId 设备Id
     * @param deviceGroupIds 设备组
     * @return 结果
     */
    public Integer addDeviceToDeviceGroup(Integer deviceId, List<Integer> deviceGroupIds);

    /**
     * 往设备组中添加设备
     * @param dto 数据
     * @return 结果
     */
    public Integer deviceGroupAddDevice(DeviceGroupAddDeviceDTO dto);

    /**
     * 根据Id查询组信息
     * @param deviceGroupId 组id
     * @return 结果
     */
    public DeviceGroup selectDeviceGroupById(Integer deviceGroupId);

    /**
     * 根据设备组id查询设备
     * @param groupId 设备id
     * @return 结果
     */
    public List<Device> selectDeviceListByGroupId(Integer groupId);


    /**
     * 查询设备组下设备的网关
     * @param groupId
     * @return
     */
    public List<String> selectDeviceGateWay(Integer groupId);


    /**
     * 查询设备可以分配的用户组
     * @param deviceId 设备
     * @return 结果
     */
    public List<DeviceGroup> selectAssignableDeviceGroup(Integer deviceId,Integer userId);

    /**
     * 查询不在组中的设备
     * @param userId 用户id
     * @param groupId 组id
     * @return 结果
     */
    public List<Device> selectDeviceNotInGroup(Integer userId,Integer groupId);
}
